﻿using System;
using System.Collections.Generic;
using System.Text;
using Litografia.BusinessEntities;
using Litografia.DataObjects;

namespace Litografia.BusinessComponents
{
    public sealed class BCOT
    {
        #region Methods: Public

        public static BEOT GetParametricData()
        {
            return DOOT.GetParametricData();
        }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "ex"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "errores"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
        public static BEOT Get(string ordenTrabajoNumber, BEOT container)
        {
            // Limpia las tablas antes de cargarlas con la nueva orden de trabajo
            container.OTGasto.Clear();
            container.OTDetalle.Clear();
            container.OTMaterial.Clear();
            container.OTEntrega.Clear();
            container.OrdenTrabajo.Clear();

            var result = DOOT.Get(ordenTrabajoNumber);

            // llena los nombres de las tablas catalogo
            foreach (var row in result.OTDetalle)
            {
                if (!row.IsAyudanteIdNull())
                    row.AyudanteNombre = row.AyudanteId.ToString();

                if (!row.IsMaquinaIdNull())
                    row.MaquinaNombre = row.MaquinaId.ToString();

                if (!row.IsOperarioIdNull())
                    row.OperarioNombre = row.OperarioId.ToString();
            }

            foreach (var row in result.OTMaterial)
            {
                if (!row.IsMaterialIdNull())
                    row.MaterialNombre = row.MaterialId;
                if (!row.IsOperarioIdNull())
                    row.OperarioNombre = row.OperarioId.ToString();
            }
            
            container.Merge(result);
            container.EnforceConstraints = true;

            return container;
        }

        public static BEOT GetOTCotizacion(string ordenTrabajoNumber, BEOT container)
        {
            // Limpia las tablas antes de cargarlas con la nueva orden de trabajo
            container.Clear();

            var result = DOOT.GetOTCotizacion(ordenTrabajoNumber);

            container.Merge(result);
            container.EnforceConstraints = true;

            return container;
        }

        public static void Save(BEOT registroOT)
        {
            DOOT.Save(registroOT);
        }
        public static void SaveOTCotizacion(BEOT cotizacionOT)
        {
            DOOT.SaveOTCotizacion(cotizacionOT);
        }
        public static void SaveRequisicion(BERequisicion requisicion)
        {
            DOOT.SaveRequisicion(requisicion);
        }

        public static void CloseEntrega(int entregaId)
        {
            DOOT.CloseEntrega(entregaId);
        }

        public static BEHorasLaboradasReporte GetHorasLaboradas(IList<int> operarioIds, DateTime? beginDate, DateTime? endDate)
        {
            var operarios = new StringBuilder();
            foreach (var id in operarioIds)
                operarios.Append(id + ",");

            return DOOT.GetHorasLaboradas(operarios.ToString().Substring(0, operarios.Length - 1), beginDate, endDate);
        }

        public static IList<BEEntity> GetEstados()
        {
            return DOOT.GetEstados();
        }

        public static IList<BEEntity> GetOTList()
        {
            return DOOT.GetOTList();
        }

        #endregion
    }
}
